#-*- codeing = utf-8 -*-
#@Time : 2020/11/25 13:57
#@Author : 阳某
#@File : 10.类.py
#@Software : PyCharm

# 类的演变
def  pressHorn():
    print('嘟嘟~~~~~~')

benzCar = {
    'brand'   : '奔驰',
    'country' : '德国',
    'price'   : 300000,
    'pressHorn' : pressHorn # 字典对象的值可以是一个函数对象
}

# 我可以这样执行它的行为
benzCar['pressHorn']()

#
# class BenzCar:
#     # 类属性
#     brand = '奔驰'  # 品牌属性
#     country = '德国'  # 产地属性
#
#     # 每个势力独有的属性，称为类的实例属性，实例属性通常是在类的
#     # 初始化方法__init__里面定义的，实例化一个类的时候会自动调用这个方法
#     # 初始化方法, 注意前后各有两个下划线
#     def __init__(self):
#         self.color = 'red'  # 颜色
#         self.engineSN = '837873398'  # 发动机编号
#     # 静态方法，类方法
#     @staticmethod
#     def pressHorn():
#         print('嘟嘟~~~~~~')
#
# # 类的实例化就是类名（）
# # benzCar()
#
# BenzCar.pressHorn()
# print(BenzCar.brand)
#
# car1 = BenzCar()
# car2 = BenzCar()
# print(car1 == car2)
# print(car1.brand)
# car1.pressHorn()
#
# # 可以通过类的实例访问实例属性
# print(car1.color)
# print(car1.engineSN)
#
# # 不可以通过类名访问实例属性，比如每个人可有每个人的体重，人类就没有体重的说法
# # print(BenzCar.engineSN)
# print(BenzCar().engineSN)

class BenzCar:
    brand   = '奔驰'
    country = '德国'

    @staticmethod
    def pressHorn():
        print('嘟嘟~~~~~~')

    def __init__(self,color,engineSN):
        self.color  =  color     # 颜色
        self.engineSN = engineSN # 发动机编号

car1 = BenzCar('白色','24503425527866')
car2 = BenzCar('黑色','34598423586877')
print(car1.color)
print(car2.color)
print(car1.engineSN)
print(car2.engineSN)


class BenzCar:
    brand = '奔驰'
    country = '德国'

    @staticmethod
    def pressHorn():
        print('嘟嘟~~~~~~')
    # 实例方法
    def __init__(self, color, engineSN):
        self.color = color  # 颜色
        self.engineSN = engineSN  # 发动机编号
    # 实例方法
    def changeColor(self, newColor):
        self.color = newColor

# 如果你的实例属性名称 和 静态属性 重复了 ，通过类实例访问该属性，访问的是实例属性。通过类名访问该属性，访问的是类属性。
# 类的静态方法不可以访问实例属性
car1 = BenzCar('白色', '24503425527866')
print(car1.color)
car1.changeColor('黑色')
print(car1.color)


class Car:
    brand = '奔驰'
    name = 'Car'

    def __init__(self):
        # 可以通过实例访问到类属性
        print(self.brand)

        # 定义实例属性和类属性重名
        self.name = 'benz car'

c1 = Car()

print(f'通过实例名访问name：{c1.name}')
print(f'通过类名  访问name：{Car.name}')